home *** CD-ROM | disk | FTP | other *** search
/ Aminet 35 / Aminet 35 (2000)(Schatztruhe)[!][Feb 2000].iso / Aminet / dev / e / cha_source.lha / cha_source / oss_sample.e < prev    next >
Encoding:
Text File  |  1999-12-18  |  3.2 KB  |  92 lines

  1. /*==========================================================================+
  2. | oss_sample.e                                                              |
  3. | get info about an OSS sample                                              |
  4. +--------------------------------------------------------------------------*/
  5.  
  6. OPT PREPROCESS
  7. OPT MODULE
  8.  
  9. MODULE '*oss', '*calcs', '*debug', 'utility', 'utility/tagitem'
  10.  
  11. /*-------------------------------------------------------------------------*/
  12.  
  13. EXPORT ENUM OSS_SA_SAMPLE = TAG_USER,
  14.             OSS_SA_TYPE,
  15.             OSS_SA_CHANNELS,
  16.             OSS_SA_BITS,
  17.             OSS_SA_LENGTH,
  18.             OSS_SA_NOTE,
  19.             OSS_SA_FINETUNE,
  20.             OSS_SA_TRANSPOSE,
  21.             OSS_SA_RATE,
  22.             OSS_SA_DATA,
  23.             SAMPLETYPE_EMPTY = 0,
  24.             SAMPLETYPE_SAMPLE8,
  25.             SAMPLETYPE_SAMPLE16,
  26.             SAMPLETYPE_UNKNOWN,
  27.             CHANNELS_MONO = 1,
  28.             CHANNELS_STEREO,
  29.             BITS_8 = 8,
  30.             BITS_16 = 16,
  31.             NOTE_C_3 = 25
  32.  
  33. /*-------------------------------------------------------------------------*/
  34.  
  35. EXPORT OBJECT oss_sample
  36. PUBLIC
  37.     sample    : LONG   -> octamed sample number (1 .. 63)
  38.     type      : LONG   -> SAMPLETYPE_#?
  39.     -> following only for samples
  40.     channels  : LONG   -> 1 or 2
  41.     bits      : LONG   -> 8 or 16
  42.     length    : LONG   -> length of sample (in samples)
  43.     note      : LONG   -> note number
  44.     finetune  : LONG   -> finetune
  45.     transpose : LONG   -> transpose
  46.     rate      : LONG   -> sample rate
  47.     -> following only for mono samples
  48.     data      : LONG   -> sample data (either SBYTES or SWORDS)
  49. ENDOBJECT
  50.  
  51. PROC oss_sample(sample) OF oss_sample
  52.     DEF type
  53.     IF (1 <= sample) AND (sample <= 63)
  54.         self.sample := sample
  55.         oss('in_select \d', sample)
  56.         self.channels := IF ossv('in_isstereo') THEN CHANNELS_STEREO ELSE CHANNELS_MONO
  57.         type := oss('in_gettype')
  58.         IF     StrCmp('EMPTY', type)
  59.             self.type := SAMPLETYPE_EMPTY
  60.         ELSEIF StrCmp('SAMPLE', type)
  61.             self.type := SAMPLETYPE_SAMPLE8
  62.             self.bits := BITS_8
  63.             IF self.channels = CHANNELS_MONO THEN self.data := oss_samplebase(sample)
  64.         ELSEIF StrCmp('SAMPLE16', type)
  65.             self.type := SAMPLETYPE_SAMPLE16
  66.             self.bits := BITS_16
  67.             IF self.channels = CHANNELS_MONO THEN self.data := oss_samplebase(sample)
  68.         ELSE
  69.             self.type := SAMPLETYPE_UNKNOWN
  70.         ENDIF
  71.         self.length := ossv('sa_getsamplelength')
  72.         self.note      := ossv('in_getdefaultpitch')
  73.         IF self.note = 0 THEN self.note := NOTE_C_3
  74.         self.finetune  := ossv('in_getfinetune')
  75.         self.transpose := ossv('in_gettranspose')
  76.         self.rate := oss_Period2Frequency(type := oss_NoteFinetune2Period(
  77.                                 self.note + self.transpose, self.finetune))
  78.         debug(['oss_input.sample = \d[8]',   self.sample])
  79.         debug(['oss_input.bits   = \d[8]',   self.bits  ])
  80.         debug(['oss_input.length = \d[8]',   self.length])
  81.         debug(['oss_input.data   = \z\h[8]', self.data  ])
  82.     ELSE
  83.         Throw("oss", 'sample number out of range')
  84.     ENDIF
  85. ENDPROC
  86.  
  87. PROC end() OF oss_sample IS EMPTY
  88.  
  89. /*--------------------------------------------------------------------------+
  90. | END: oss_sample.e                                                         |
  91. +==========================================================================*/
  92.